#ifndef SHELL_H_
#define SHELL_H_

class Scheduler;
class Universe;
class Ghost;
class Event;
#include "Position.h"
#include "Direction.h"

class Shell
{
public:
    Shell(Universe * universe, Scheduler * scheduler, Ghost * ghost);
    virtual ~Shell();

    void spawn();
    
    
    void setActive(bool value = true);
    
    void setPosition(const Position & position);
    const Position & getPosition() const;
    
    // what we can do (it's a bureaucracy)
    bool requestMove(Direction & dir);
    bool requestPosition(Position & pos);
    
    unsigned int getID() const { return id; };

    // info
    bool isActive();
    Ghost * getGhost();
private:
    Event * event;
    Universe * universe;
    Scheduler * scheduler;
    Ghost * ghost;
    
    // data about the ghost
    Position position;
    bool active;
    
        
    unsigned int id;
    static unsigned int uniqueId;
};

#endif /*SHELL_H_*/

